package com.jdbc;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;

public class TestNamedParameterJdbcTemplate {

	NamedParameterJdbcTemplate jdbcTemplate;
	{
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext_jdbc.xml");
		jdbcTemplate = applicationContext.getBean(NamedParameterJdbcTemplate.class);
	}

	/**
	 * 
	 */
	@Test
	public void testNamedParameterJdbcTemplate2() {
		String sql = "insert into user(uname,pwd,sex) values(:uname,:pwd,:sex)";
		
		User user = new User();
		user.setUname("wwj6");
		user.setPwd("132");
		user.setSex("1");
		SqlParameterSource paramSource = new BeanPropertySqlParameterSource(user);
		int update = jdbcTemplate.update(sql, paramSource);
		System.out.println(update);
		
	}
	
	
	/**
	 * 为参数起名字：不用再去对应参数的位置，直接按照名字来就能够正确传参。便于维护。\n
	 * 用法：在sql语句中，以前是使用 ？ 符号来代替的参数，现在使用 冒号+名字 来代替参数。如下用法。
	 * 不好的地方就是较为麻烦。
	 * 
	 */
	@Test
	public void testNamedParameterJdbcTemplate() {
		String sql = "insert into user(uname,pwd,sex) values(:uname,:pwd,:sex)";
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put("uname", "wwj5");
		paramMap.put("pwd", "123");
		paramMap.put("sex", "1");
		
		int update = jdbcTemplate.update(sql, paramMap );
		System.out.println(update);
	}}